package cn.tedu.service;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * feign作为负载均衡调用服务客户端，可以通过注解形式实现底层代码封装，不需要手动编写http请求代码，不用restTemplate，配和Spring MVC的注解实现
 * 这个接口中的所有方法，都和被访问的工程中的controller方法完全一致
 */
@FeignClient("service-hi")// 表示该接口交给Feign实现底层逻辑，并且该接口的实现类中，所有方法都需要访问service-hi这个服务
public interface HelloService {
    /**
     * 即使使用注解实现访问服务指定，service-hi,对着服务后端提供者中可能有好多个访问的接口，service-hi/hello service-hi/hello2 service-hi/hello3
     * 可以使用Spring MVC注解实现更详细的请求方法定义
     * 实现方法: restTemplate.getForObject("http://service-hi/client/hello?name="+name,String.class)
     * @RequestMapping 定义uri method
     * @RequestParam 定义请求参数
     * @param name
     * @return
     */
    @RequestMapping(value = "/client/hello", method = RequestMethod.GET)
    String sayHi(@RequestParam("name") String name);
}
